﻿using System;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using Sinacor.UI.Bovespa.Corretagem.Communication.Bovespa.Corretagem.FormadorMercado;

namespace Sinacor.UI.Bovespa.Corretagem.Communication
{
    public class FormadorMercado : BaseCommunication
    {
        #region Atributos

        Translator.ModelToDataContract.FormadorMercado _translatorModelToDC = null;
        Translator.DataContractToModel.FormadorMercado _translatorDCToModel = null;

        #endregion

        #region Construtor

        public FormadorMercado(SessionInformation sessionInformation)
            : base(sessionInformation)
        {
            this._translatorModelToDC = new Translator.ModelToDataContract.FormadorMercado();
            this._translatorDCToModel = new Translator.DataContractToModel.FormadorMercado();
        }

        #endregion

        #region ConsultarMercados

        public void AlterarFormadoresMercados(ModelCollection<Model.FormadorMercado> modelList)
        {
            IFormadorMercado servico = null;
            try
            {
                using (ServiceInstance<IFormadorMercado> service = new ServiceInstance<IFormadorMercado>())
                {
                    servico = service.TryGetInstance(this.Session);
                    servico.AlterarFormadoresMercados(new Translator.ModelToDataContract.FormadorMercado().ToFormadorMercado(modelList));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
        }

        public void AlterarFormadorMercado(Model.FormadorMercado model)
        {
            IFormadorMercado servico = null;
            try
            {
                using (ServiceInstance<IFormadorMercado> service = new ServiceInstance<IFormadorMercado>())
                {
                    servico = service.TryGetInstance(this.Session);
                    servico.AlterarFormadorMercado(new Translator.ModelToDataContract.FormadorMercado().ToFormadorMercado(model));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
        }

        public ModelCollection<Model.FormadorMercado> ConsultarFormadoresMercados(Model.Parameter.FiltroFormadorMercado parameter)
        {
            IFormadorMercado servico = null;
            try
            {
                using (ServiceInstance<IFormadorMercado> service = new ServiceInstance<IFormadorMercado>())
                {
                    servico = service.TryGetInstance(this.Session);
                    return new Translator.DataContractToModel.FormadorMercado().ToFormadorMercado(
                        servico.ConsultarFormadoresMercados(new Translator.ModelToDataContract.FormadorMercado().ToFiltroFormadorMercado(parameter)));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }

            return null;
        }

        public void ExcluirFormadorMercado(Model.FormadorMercado parameter)
        {
            IFormadorMercado servico = null;
            try
            {
                using (ServiceInstance<IFormadorMercado> service = new ServiceInstance<IFormadorMercado>())
                {
                    servico = service.TryGetInstance(this.Session);
                    servico.ExcluirFormadorMercado(this._translatorModelToDC.ToFormadorMercado(parameter));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
        }

        public void ExcluirFormadorMercados(ModelCollection<Model.FormadorMercado> parameterList)
        {
            IFormadorMercado servico = null;
            try
            {
                using (ServiceInstance<IFormadorMercado> service = new ServiceInstance<IFormadorMercado>())
                {
                    servico = service.TryGetInstance(this.Session);
                    servico.ExcluirFormadoresMercados(new Translator.ModelToDataContract.FormadorMercado().ToFormadorMercado(parameterList));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
        }

        public void ExecutarTransacoesFormadorMercado(ModelCollection<Model.FormadorMercado> inclusaoList, ModelCollection<Model.FormadorMercado> exclusaoList, ModelCollection<Model.FormadorMercado> alteracaoList)
        {
            IFormadorMercado servico = null;
            try
            {
                using (ServiceInstance<IFormadorMercado> service = new ServiceInstance<IFormadorMercado>())
                {
                    servico = service.TryGetInstance(this.Session);
                    servico.ExecutarTransacoesFormadorMercado(
                        new Translator.ModelToDataContract.FormadorMercado().ToFormadorMercado(inclusaoList),
                        new Translator.ModelToDataContract.FormadorMercado().ToFormadorMercado(exclusaoList),
                        new Translator.ModelToDataContract.FormadorMercado().ToFormadorMercado(alteracaoList));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
        }

        public void IncluirFormadorMercado(Model.FormadorMercado model)
        {
            IFormadorMercado servico = null;
            try
            {
                using (ServiceInstance<IFormadorMercado> service = new ServiceInstance<IFormadorMercado>())
                {
                    servico = service.TryGetInstance(this.Session);
                    servico.IncluirFormadorMercado(new Translator.ModelToDataContract.FormadorMercado().ToFormadorMercado(model));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
        }

        public void IncluirFormadorMercados(ModelCollection<Model.FormadorMercado> modelList)
        {
            IFormadorMercado servico = null;
            try
            {
                using (ServiceInstance<IFormadorMercado> service = new ServiceInstance<IFormadorMercado>())
                {
                    servico = service.TryGetInstance(this.Session);
                    servico.IncluirFormadoresMercados(new Translator.ModelToDataContract.FormadorMercado().ToFormadorMercado(modelList));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
        }
        #endregion

    }
}
